package main

// 解决不能确定什么时候关闭chan 的情况

// select 多路复用，使用上可以类比switch语句

// 每个case 对应一个管道的通信（接受或发送），select 会一直等待知道某个case 的通信操作完成，执行其对应语句

// 可以处理多个channel的接收和发送，当满足多个case 的时候，会随机选择其中一种情况



import "fmt"

func main() {
	// 定义一个chan 接收10个int数据
   intchan := make(chan int, 10)
	for i := 0; i < 10; i++{
		intchan <- i
	}
	
	// 定义一个chan接收5个string
	strchan := make(chan string, 5)
	for i := 0; i < 5; i++{
		strchan <- fmt.Sprintln("stringchan ", i)
	}
	
	for {
		select {
		case v := <- intchan:
			fmt.Printf("value from intchan %v \n", v)
		case v := <- strchan:
			fmt.Printf("value from strchan %v \n", v)
		default:
			fmt.Println("all  done")
			return
		}
	}
	
}
